# class Cat:
#  # 在缩进中书写 ⽅法
#  def eat(self): # self 会⾃动出现,暂不管
#         print('⼩猫爱吃⻥...')
#
# black_cat.eat()
# 1. 从函数的语法上讲, self是形参, 就可以是任意的变量名,
# 只不过我们习惯性将这个形参写作 self
# 2. self 是普通的形参, 但是在调⽤的时候没有传递实参值,
# 原因是, Python 解释器在执⾏代码的时候, ⾃动的将调⽤这个
# ⽅法的对象 传递给了 self, 即 self 的本质是对象
# 3. 验证, 只需要确定 通过哪个对象调⽤, 对象的引⽤和 self
# 的引⽤是⼀样的
# 4. self 是函数中的局部变量, 直接创建的对象是全局变量

# 需求:⼩猫爱吃⻥，⼩猫要喝⽔, 定义不带属性的类

class Cat:
 # 在缩进中书写 ⽅法
 def eat(self): # self 会⾃动出现,暂不管
         print(f'{id(self)}, self')
         print('⼩猫爱吃⻥...')
# 2. 创建对象
blue_cat = Cat()
print(f'{id(blue_cat)}, blue_cat')
# 给蓝猫添加name属性
blue_cat.name='蓝猫'
# 3. 通过对象调⽤类中的⽅法
blue_cat.eat() # blue_cat 对象调⽤ eat ⽅法, 解释器就会将 blue_cat 对象传给 self
print('_*_' * 30)
# 创建对象
black_cat = Cat()
black_cat.name='黑猫'
print(f"{id(black_cat)}, black_cat")
black_cat.eat() # black_cat 对象调⽤ eat ⽅法, 解释器就会将 black_cat 对象传给 self